package com.sqx.modules.trends.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sqx.common.annotation.SysLog;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.app.dao.BlockAndUserDao;
import com.sqx.modules.app.entity.BlockAndUser;
import com.sqx.modules.trends.entity.Trends;
import com.sqx.modules.trends.entity.TrendsType;
import com.sqx.modules.trends.service.ITrendsService;
import com.sqx.modules.trends.vo.TrendsVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 用户动态-用户端
 *
 * @author wuChang
 * @since 2023-09-26
 */
@RestController
@Api(value = "用户动态-用户端", tags = {"用户动态-用户端"})
@RequestMapping("/app/trends/")
public class AppTrendsController {
    @Autowired
    private ITrendsService iTrendsService;

    @Autowired
    private BlockAndUserDao blockAndUserDao;

    /**
     * 发布或更新用户动态
     *
     * @param trends
     * @return
     */
    @SysLog(value = "发布或更新用户动态", type = "2")
    @Login
    @ApiOperation("新增或修改用户动态")
    @PostMapping(value = "saveTrends")
    public Result saveTrends(@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                             @ApiParam("动态实体") Trends trends) {
        trends.setUserId(userId);
        trends.setStatus(0);
        return iTrendsService.saveTrends(trends);
    }

    /**
     * 获取我的动态列表
     *
     * @param page     第几页
     * @param limit    多少条
     * @param trendsVo
     * @return
     */
    @Login
    @ApiOperation("获取我的动态列表")
    @GetMapping(value = "getMyTrendsList")
    public Result getMyTrendsList(@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                  @ApiParam("页码") Integer page,
                                  @ApiParam("条数") Integer limit,
                                  @ApiParam("被查看的用户id") Long byUserId,
                                  @ApiParam("动态实体") TrendsVo trendsVo) {
        trendsVo.setUserId(userId);
        return Result.success().put("data", iTrendsService.getTrendsList(page, limit, byUserId, trendsVo));
    }

    /**
     * 获取动态列表
     *
     * @param page     第几页
     * @param limit    多少条
     * @param trendsVo
     * @return
     */
    @ApiOperation("获取动态列表")
    @GetMapping(value = "getTrendsList")
    public Result getTrendsList(@ApiParam("页码") Integer page,
                                @ApiParam("条数") Integer limit,
                                @ApiParam("被查看的用户id") Long byUserId,
                                @ApiParam("动态实体") TrendsVo trendsVo) {
        trendsVo.setStatus(1);
        return Result.success().put("data", iTrendsService.getTrendsList(page, limit, byUserId, trendsVo));
    }

    /**
     * 获取所有的动态列表
     *
     * @param page       第几页
     * @param limit      多少条
     * @param searchType 传1 查关注的动态 传2 查动态 传3 查上新推荐
     * @param trendsVo   他里面的typeId是类型id
     * @param trendsVo
     * @return
     */
    @Login
    @ApiOperation("获取所有的动态列表")
    @GetMapping(value = "getAllTrendsList")
    public Result getAllTrendsList(@ApiParam("页码") Integer page,
                                   @ApiParam("条数") Integer limit,
                                   @ApiParam("被查看的用户id") Long byUserId,
                                   @ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                   @ApiParam("传1 查关注的动态 传2 查动态 传3 查上新推荐") Integer searchType,
                                   @ApiParam("动态实体") TrendsVo trendsVo) {
        trendsVo.setStatus(1);
        return iTrendsService.getAllTrendsList(page, limit, byUserId, userId, searchType, trendsVo);
    }

    /**
     * @param page
     * @param limit
     * @param type     1 商品  2动态 3评价
     * @param userId
     * @param byUserId
     * @return
     */
    @Login
    @ApiOperation("获取其他用户主页动态及商品详情")
    @GetMapping(value = "selectDynamicHomepage")
    public Result selectDynamicHomepage(@ApiParam("页码") Integer page,
                                        @ApiParam("条数") Integer limit,
                                        @ApiParam("1 商品  2动态 3 评价") Integer type,
                                        @ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                        @ApiParam("被查看的用户id") Long byUserId) {
        return iTrendsService.selectDynamicHomepage(page, limit, type, userId, byUserId);
    }

    /**
     * @param userId
     * @param byUserId
     * @return
     */
    @Login
    @ApiOperation("获取其他用户主页统计")
    @GetMapping(value = "selectDynamicCount")
    public Result selectDynamicCount(@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                     @ApiParam("被查看的用户id") Long byUserId) {
        return iTrendsService.selectDynamicCount(userId, byUserId);
    }

    /**
     * @param userId
     * @param byUserId
     * @return
     */
    @Login
    @ApiOperation("获取其他用户主页商品列表")
    @GetMapping(value = "selectDynamicGoods")
    public Result selectDynamicGoods(Integer page,Integer limit,@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                     @ApiParam("被查看的用户id") Long byUserId) {
        return iTrendsService.selectDynamicGoods(page,limit,userId, byUserId);
    }

    /**
     * @param userId
     * @param byUserId
     * @return
     */
    @Login
    @ApiOperation("获取其他用户主页动态列表")
    @GetMapping(value = "selectDynamicTrends")
    public Result selectDynamicTrends(Integer page,Integer limit,@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                     @ApiParam("被查看的用户id") Long byUserId) {
        return iTrendsService.selectDynamicTrends(page,limit,userId, byUserId);
    }


    /**
     * @param userId
     * @param byUserId
     * @return
     */
    @Login
    @ApiOperation("获取其他用户主页评论列表")
    @GetMapping(value = "selectDynamicComments")
    public Result selectDynamicComments(Integer page,Integer limit,@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                                      @ApiParam("被查看的用户id") Long byUserId) {
        return iTrendsService.selectDynamicComments(page,limit,userId, byUserId);
    }


    /**
     * 获取动态详情
     *
     * @param byUserId 当前登录人用户id(没有不传)
     * @param trendsId 动态id
     * @return
     */
    @Login
    @ApiOperation("获取动态详情")
    @GetMapping(value = "getTrendsInfo")
    public Result getTrendsInfo(@ApiParam("userId") @RequestAttribute Long userId,
                                @ApiParam("被查看用户id") Long byUserId,
                                @ApiParam("动态id") Long trendsId) {
        return Result.success().put("data", iTrendsService.getTrendsInfo(userId, byUserId, trendsId));
    }

    /**
     * 删除用户动态
     *
     * @param trendsId 动态id
     * @return
     */
    @Login
    @ApiOperation("删除用户动态")
    @SysLog(value = "删除用户动态", type = "2")
    @GetMapping(value = "deleteTrends")
    public Result deleteTrends(@ApiParam("用户id") @RequestAttribute("userId") Long userId,
                               @ApiParam("动态id") Long trendsId) {
        return iTrendsService.deleteTrends(userId, trendsId);
    }

    @ApiOperation("查询动态类型列表")
    @GetMapping(value = "selectTrendsTypeList")
    public Result selectTrendsTypeList(@ApiParam("页码") Integer page,
                                       @ApiParam("条数") Integer limit,
                                       @ApiParam("动态类型") TrendsType trendsType) {
        return iTrendsService.selectTrendsTypeList(page, limit, trendsType);
    }
}
